// 获取类型
import type {
  IStateCreateListOption
} from '../types/type'

// 状态的容器
import { store, _storeFlag } from './store'
import defineStore from './defineStore'

/**
 * 开局时创建一批全局状态。在main里面。
 * @param info 状态列表，多个状态，和回调函数
 * * store
 * * * state 的类型
 * * * * function：setup 风格，不记录日志，全局状态
 * * * * 对象：
 * * * * * 没有 state 属性：整个对象作为 state，无 getter、action
 * * * * * 有 state：option 风格
 * * init 创建完毕后的回调函数
 */
export default function createStore(info: IStateCreateListOption) {
  // 获取状态列表
  const tmpStore = info.store
  
  // 遍历，调用 defineStore 注册状态
  Object.keys(tmpStore).forEach(key => {
    // 创建全局状态
    defineStore(key, tmpStore[key], false)
  })

  // 创建完毕，调用回调
  if (typeof info.init === 'function') {
    info.init(store)
  }

  // 安装插件
  return (app: any) => {
    // 设置模板直接使用状态
    app.config.globalProperties.$state = store
    // 发现个问题，这是个object，不用注入到 provide
    app.provide(_storeFlag, store)
  }
}